#! /usr/bin/env python
# -*- coding:utf-8 -*-

list

'''
list的创建，三种方式
list的增删改查
'''

# 创建一个list
# 方式1
li=[1,2,"messi",[1,2,3]]
print(li)


# 方式2
li2=list("messi") # 参数必须是可迭代的
print(li2)

li3=list([1,2,"messi",[1,2,3]])
print(li3)

# 方式3 列表推导式
# TODO 待添加
li4=[x*3 for x in range(5)]
print(li4) # [0, 3, 6, 9, 12]

'''
增
'''

li=["messi","ronald"]
# 增
# 1 append 追加
li.append("herry")
print(li)

# 练习 人事输入人名，当按q或Q退出
# while 1:
#     name=input("请输入人名，按Q或q退出")
#     if name.upper()=="Q":
#         break
#     li.append(name)
#
# print(li)

# 2 insert 插入
li.insert(2,"kaka")
print(li)
# 3 extend 迭代追加
li.extend(["zidane","gaolin"]) # 参数应该是可以迭代的
print(li)

li.extend("abcd")
print(li)

'''
删
'''

# 1 按照索引位置删除
# 默认删除最后一个元素
li.pop()
print(li)
# 删除第一个元素，返回被删除的元素
r=li.pop(0)
print(r)
print(li)
# 2 按照元素删除，如果列表中有多个被删除的元素，删除左边第一个
li.append("ronald")
print(li)
li.remove("ronald")
print(li)

# 3 清空列表
# li.clear()
# print(li) # []

# 使用del删除，可以按索引删除，按切片删除
del li[-1]
print(li)

del li[-1:-4:-1]
print(li)


'''
改
'''
# 按照索引改
li[0]="clyang"
print(li)

# 按照切片改
# li[4:]="abcdef"
# print(li)

# 按有步长的切片改
li[::2]="ab"
# li[::2]="abc" # 报错 attempt to assign sequence of size 3 to extended slice of size 2
print(li)

'''
查 索引查、切片查、for循环查
'''
for item in li:
    print(item)


#  练习
l1 = [1, 2, 'taibai', [1, 'alex', 3,]]
# 1, 将l1中的'taibai'变成大写并放回原处。
# print(l1[2])
l1[2]=l1[2].upper()
print(l1)
# 2，给小列表[1,'alex',3,]追加一个元素,'老男孩教育'。
l1[3].append('老男孩')
print(l1)
# 3，将列表中的'alex'通过字符串拼接的方式在列表中变成'alexsb'
print(l1[3][1])
l1[3][1]=l1[3][1]+'sb'
print(l1)

# 练习2
lis=[2,30,'k',['qwe',20,['k1',['tt',3,'1']],89],'ab','adv']
# 将列表中的tt变成大写
lis[3][2][1][0]=lis[3][2][1][0].upper()
lis[3][2][1][0]='TT'
print(lis)
# 将列表中的数字3，变成字符串'100'
# lis[3][2][1][1]='100'
lis[3][2][1][1]=str(int(lis[3][2][1][1])+97)
print(lis)
# 将列表中的字符串1，变成数字101
# lis[3][2][1][2]=101
lis[3][2][1][2]=int(lis[3][2][1][2])+100
print(lis)